package cn.xzqwjw.taskmanager.repository;

import cn.xzqwjw.taskmanager.domain.pojo.Article;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Map;

/**
 * @author wjw
 */
@Repository
public interface ArticleMapper extends BaseMapper<Article> {

  // 如果添加@MapKey("id")，则返回值为 id:{title:"aaa"} 的形式，非常不方便，因此不加

  /**
   * 更新点击次数
   *
   * @param id 文章id
   * @return 受影响的条数
   */
  int updateClick(Integer id);

  /**
   * 根据id得到文章详细内容
   *
   * @param id 文章Id
   * @return 分页对象
   */
  Map<String, Object> getDetailById(Integer id);

  /**
   * 管理员分页查询某栏目下所有管理员添加的文章列表，包括已审未审文章
   * flagDeleted=0表示所有未删文章，=1表示回收站文章
   * editorId=0 表示调用所有编辑的文章，editorId>0 表示调用某编辑的所有文章
   * categoryId=0 表示调用所有文章，categoryId>1 表示调用某栏目下所有文章
   *
   * @param page     分页对象,xml中可以从里面进行取值
   *                 传递参数 Page 即自动分页,必须放在第一位(你可以继承Page实现自己的分页对象)
   * @param paramMap 查询参数Map
   * @return 分页对象
   */
  IPage<Map<String, Object>> selectPage4Admin(Page<?> page, @Param("paramMap") Map<String, Object> paramMap);

  /**
   * 分页查询标题含有某关键字词的文章列表，包括已审未审文章，已删未删文章
   * editorId=0 表示查询所有编辑的文章，editorId>0 表示查询某编辑的文章
   *
   * @param page     分页对象
   * @param paramMap 查询参数Map
   * @return 分页对象
   */
  IPage<Map<String, Object>> search4Admin(Page<?> page, @Param("paramMap") Map<String, Object> paramMap);

  /**
   * 分页查询Mysql数据库里的文章列表，提供给前端展示
   *
   * @param page        分页对象,xml中可以从里面进行取值
   *                    传递参数 Page 即自动分页,必须放在第一位(你可以继承Page实现自己的分页对象)
   * @param categoryIds 栏目Id组
   * @return 分页对象
   */
  IPage<Map<String, Object>> selectPage4Front(Page<?> page, String categoryIds);

  /**
   * 分页查询标题含有某关键字词的文章列表，包括已签发、未删文章
   *
   * @param page    分页对象
   * @param keyword 关键字词
   * @return 分页对象
   */
  IPage<Map<String, Object>> search4Front(Page<?> page, String keyword);

  // ========== 批量设置的相关函数方法 ==========

  /**
   * 批量设置文章status
   *
   * @param paramMap 查询参数Map(status, ids)
   */
  void batchSetStatus(@Param("paramMap") Map<String, Object> paramMap);

  /**
   * 批量设置审核文章管理员id
   *
   * @param paramMap 查询参数Map(idChecker, ids)
   * @return 受影响的条数
   */
  int batchSetIdChecker(@Param("paramMap") Map<String, Object> paramMap);

  /**
   * 批量设置审核文章管理员id
   *
   * @param paramMap 查询参数Map(idSigner, ids)
   * @return 受影响的条数
   */
  int batchSetIdSigner(@Param("paramMap") Map<String, Object> paramMap);

  /**
   * 批量移动到其他栏目
   *
   * @param paramMap 查询参数Map(idCategory, ids)
   * @return 受影响的条数
   */
  int batchMove(@Param("paramMap") Map<String, Object> paramMap);

  /**
   * 批量删除（文章移动到回收站）
   *
   * @param ids 要删除的ids
   */
  void batchDel(String ids);

  /**
   * 批量真实删除（回收站中删除文章）
   *
   * @param ids 要删除的ids
   * @return 受影响的条数
   */
  int batchDelReal(String ids);

  /**
   * 批量恢复（文章移动到草稿箱）
   *
   * @param ids 要恢复的ids
   */
  void batchUnDel(String ids);

  /**
   * 根据id真实删除单篇文章
   *
   * @param id 文章id
   * @return 受影响的条数
   */
  int delByIdReal(Integer id);

  /**
   * 单条恢复（文章移动到草稿箱）
   *
   * @param id 文章id
   * @return 受影响的条数
   */
  int unDel(Integer id);

}




